@delorenj/mcp-server-trello 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,8 +6,59 @@
6
6
 
7
7
  A Model Context Protocol (MCP) server that provides tools for interacting with Trello boards. This server enables seamless integration with Trello's API while handling rate limiting, type safety, and error handling automatically.
8
8
 
9
+ ## 🎉 New in v1.2.0: Complete Checklist Management Suite!
10
+
11
+ **Comprehensive Checklist Tools are here!** 🚀 Now you can fully manage Trello checklists with 5 powerful new tools! Search, create, and track checklist items across your boards. Perfect for managing acceptance criteria, development tasks, and project milestones!
12
+
13
+ ### ✨ New Checklist Tools:
14
+ - 📋 **`get_checklist_items`** - Retrieve all items from any checklist by name
15
+ - ➕ **`add_checklist_item`** - Add new items to existing checklists
16
+ - 🔍 **`find_checklist_items_by_description`** - Search checklist items by text content
17
+ - ✅ **`get_acceptance_criteria`** - Quick access to "Acceptance Criteria" checklists
18
+ - 📊 **`get_checklist_by_name`** - Get complete checklist with completion percentage
19
+
20
+ **Plus:** Modern MCP SDK architecture, enhanced type safety, and comprehensive documentation!
21
+
9
22
  ## Changelog
10
23
 
24
+ ### 1.2.0
25
+
26
+ **🎊 Major Feature Release: Complete Checklist Management Suite**
27
+
28
+ - **5 New Checklist Tools** for comprehensive checklist management:
29
+ - `get_checklist_items(name)` - Retrieve all items from a checklist by name
30
+ - `add_checklist_item(text, checkListName)` - Add new items to existing checklists
31
+ - `find_checklist_items_by_description(description)` - Search checklist items by text content
32
+ - `get_acceptance_criteria()` - Convenience method for "Acceptance Criteria" checklists
33
+ - `get_checklist_by_name(name)` - Get complete checklist with completion percentage
34
+ - **Modern MCP SDK Architecture:** Refactored to use latest MCP TypeScript SDK patterns with `registerTool()` and Zod validation
35
+ - **Enhanced Type Safety:** Full TypeScript support with proper type conversions between Trello API and MCP types
36
+ - **New Data Types:** `CheckList` and `CheckListItem` interfaces for structured checklist data
37
+ - **Comprehensive Documentation:** Added `CHECKLIST_TOOLS.md` with examples and best practices
38
+ - **Improved Error Handling:** Consistent error responses with descriptive messages
39
+ - **Runtime Validation:** Zod schemas for all tool inputs with automatic validation
40
+
41
+ ### 1.1.0
42
+
43
+ **🎊 Major Feature Release: Complete Card Data Extraction**
44
+
45
+ - Added powerful `get_card` tool for comprehensive single card data retrieval
46
+ - **Enhanced Data Extraction:**
47
+ - ✅ **Checklists** - Full checklist support with items, completion states, member assignments, and due dates
48
+ - 📎 **Attachments** - Complete attachment data including images, previews, file metadata, and inline image detection
49
+ - 🏷️ **Labels** - Full label details (names and colors, not just IDs)
50
+ - 👥 **Members** - Card member assignments with full profile information
51
+ - 💬 **Comments** - Card activity and comment history
52
+ - 📊 **Badges** - Statistics including checklist progress, comment counts, and attachment counts
53
+ - 🎨 **Cover Images** - Card cover image support
54
+ - 📍 **Context** - Board and list information for complete context
55
+ - 🔧 **Custom Fields** - Support for board-specific custom fields
56
+ - **Markdown Formatting:** New `includeMarkdown` parameter returns beautifully formatted, human-readable card data
57
+ - **Inline Image Parsing:** Automatically detects and extracts images embedded in card descriptions
58
+ - **Comprehensive API Integration:** Single API call fetches all card data efficiently using optimized query parameters
59
+ - **Type Safety:** Added new TypeScript interfaces for all enhanced data structures
60
+ - **Human Parity:** Achieves complete parity with Trello UI - see everything a human sees
61
+
11
62
  ### 1.0.0
12
63
 
13
64
  - Fixed MCP protocol compatibility by removing all console output that interfered with JSON-RPC communication
@@ -57,11 +108,13 @@ A Model Context Protocol (MCP) server that provides tools for interacting with T
57
108
  ## Features
58
109
 
59
110
  - **Full Trello Board Integration**: Interact with cards, lists, and board activities
111
+ - **🆕 Complete Card Data Extraction**: Fetch all card details including checklists, attachments, labels, members, and comments
60
112
  - **Built-in Rate Limiting**: Respects Trello's API limits (300 requests/10s per API key, 100 requests/10s per token)
61
113
  - **Type-Safe Implementation**: Written in TypeScript with comprehensive type definitions
62
114
  - **Input Validation**: Robust validation for all API inputs
63
115
  - **Error Handling**: Graceful error handling with informative messages
64
116
  - **Dynamic Board Selection**: Switch between boards and workspaces without restarting
117
+ - **Markdown Formatting**: Export card data in human-readable markdown format
65
118
 
66
119
  ## Installation
67
120
 
@@ -101,6 +154,23 @@ Or if you're using mise:
101
154
  }
102
155
  ```
103
156
 
157
+ To connect a Trello workspace, you'll need to manually retrieve a `TRELLO_TOKEN` once per workspace. After setting up your Trello Power-Up, visit the following URL:
158
+
159
+ ```
160
+ https://trello.com/1/authorize?expiration=never&name=YOUR_APP_NAME&scope=read,write&response_type=token&key=YOUR_API_KEY
161
+ ```
162
+
163
+ Replace:
164
+
165
+ * `YOUR_APP_NAME` with a name for your application (e.g., "My Trello Integration"). This name is shown to the user on the Trello authorization screen.
166
+ * `YOUR_API_KEY` with the API key for your Trello Power-Up
167
+
168
+ This will generate the token required for integration.
169
+
170
+ > [!NOTE]
171
+ > The `expiration=never` parameter creates a token that does not expire. For enhanced security, consider using `expiration=30days` and renewing the token periodically if your setup allows for it.
172
+
173
+
104
174
  #### Don't have pnpm?
105
175
 
106
176
  The simplest way to get `pnpm` (and thus `pnpx`) is through [mise](https://mise.jdx.dev/):
@@ -246,8 +316,119 @@ This allows you to work with multiple boards and workspaces without restarting t
246
316
  }
247
317
  ```
248
318
 
319
+ ## Date Format Guidelines
320
+
321
+ When working with dates in the Trello MCP server, please note the different format requirements:
322
+
323
+ - **Due Date (`dueDate`)**: Accepts full ISO 8601 format with time (e.g., `2023-12-31T12:00:00Z`)
324
+ - **Start Date (`start`)**: Accepts date only in YYYY-MM-DD format (e.g., `2025-08-05`)
325
+
326
+ This distinction follows Trello's API conventions where start dates are day-based markers while due dates can include specific times.
327
+
249
328
  ## Available Tools
250
329
 
330
+ ### Checklist Management Tools 🆕
331
+
332
+ #### get_checklist_items
333
+
334
+ Get all items from a checklist by name.
335
+
336
+ ```typescript
337
+ {
338
+ name: 'get_checklist_items',
339
+ arguments: {
340
+ name: string, // Name of the checklist to retrieve items from
341
+ boardId?: string // Optional: ID of the board (uses default if not provided)
342
+ }
343
+ }
344
+ ```
345
+
346
+ #### add_checklist_item
347
+
348
+ Add a new item to an existing checklist.
349
+
350
+ ```typescript
351
+ {
352
+ name: 'add_checklist_item',
353
+ arguments: {
354
+ text: string, // Text content of the checklist item
355
+ checkListName: string, // Name of the checklist to add the item to
356
+ boardId?: string // Optional: ID of the board (uses default if not provided)
357
+ }
358
+ }
359
+ ```
360
+
361
+ #### find_checklist_items_by_description
362
+
363
+ Search for checklist items containing specific text.
364
+
365
+ ```typescript
366
+ {
367
+ name: 'find_checklist_items_by_description',
368
+ arguments: {
369
+ description: string, // Text to search for in checklist item descriptions
370
+ boardId?: string // Optional: ID of the board (uses default if not provided)
371
+ }
372
+ }
373
+ ```
374
+
375
+ #### get_acceptance_criteria
376
+
377
+ Get all items from the "Acceptance Criteria" checklist.
378
+
379
+ ```typescript
380
+ {
381
+ name: 'get_acceptance_criteria',
382
+ arguments: {
383
+ boardId?: string // Optional: ID of the board (uses default if not provided)
384
+ }
385
+ }
386
+ ```
387
+
388
+ #### get_checklist_by_name
389
+
390
+ Get a complete checklist with all items and completion percentage.
391
+
392
+ ```typescript
393
+ {
394
+ name: 'get_checklist_by_name',
395
+ arguments: {
396
+ name: string, // Name of the checklist to retrieve
397
+ boardId?: string // Optional: ID of the board (uses default if not provided)
398
+ }
399
+ }
400
+ ```
401
+
402
+ **Returns:** `CheckList` object with:
403
+ - `id`: Checklist identifier
404
+ - `name`: Checklist name
405
+ - `items`: Array of `CheckListItem` objects
406
+ - `percentComplete`: Completion percentage (0-100)
407
+
408
+ ### get_card 🆕
409
+
410
+ Get comprehensive details of a specific Trello card with human-level parity.
411
+
412
+ ```typescript
413
+ {
414
+ name: 'get_card',
415
+ arguments: {
416
+ cardId: string, // ID of the Trello card (short ID like 'FdhbArbK' or full ID)
417
+ includeMarkdown?: boolean // Return formatted markdown instead of JSON (default: false)
418
+ }
419
+ }
420
+ ```
421
+
422
+ **Returns:** Complete card data including:
423
+ - ✅ Checklists with item states and assignments
424
+ - 📎 Attachments with previews and metadata
425
+ - 🏷️ Labels with names and colors
426
+ - 👥 Assigned members
427
+ - 💬 Comments and activity
428
+ - 📊 Statistics (badges)
429
+ - 🎨 Cover images
430
+ - 📍 Board and list context
431
+
251
432
  ### get_cards_by_list_id
252
433
 
253
434
  Fetch all cards from a specific list.
@@ -301,8 +482,9 @@ Add a new card to a specified list.
301
482
  listId: string, // ID of the list to add the card to
302
483
  name: string, // Name of the card
303
484
  description?: string, // Optional: Description of the card
304
- dueDate?: string, // Optional: Due date (ISO 8601 format)
305
- labels?: string[] // Optional: Array of label IDs
485
+ dueDate?: string, // Optional: Due date (ISO 8601 format with time)
486
+ start?: string, // Optional: Start date (YYYY-MM-DD format, date only)
487
+ labels?: string[] // Optional: Array of label IDs
306
488
  }
307
489
  }
308
490
  ```
@@ -319,8 +501,10 @@ Update an existing card's details.
319
501
  cardId: string, // ID of the card to update
320
502
  name?: string, // Optional: New name for the card
321
503
  description?: string, // Optional: New description
322
- dueDate?: string, // Optional: New due date (ISO 8601 format)
323
- labels?: string[] // Optional: New array of label IDs
504
+ dueDate?: string, // Optional: New due date (ISO 8601 format with time)
505
+ start?: string, // Optional: New start date (YYYY-MM-DD format, date only)
506
+ dueComplete?: boolean,// Optional: Mark the due date as complete (true) or incomplete (false)
507
+ labels?: string[] // Optional: New array of label IDs
324
508
  }
325
509
  }
326
510
  ```
@@ -1,5 +1,5 @@
1
1
  import { EvalConfig } from 'mcp-evals';
2
- import { EvalFunction } from "mcp-evals";
2
+ import { EvalFunction } from 'mcp-evals';
3
3
  declare const config: EvalConfig;
4
4
  export default config;
5
5
  export declare const evals: EvalFunction[];
@@ -1,50 +1,72 @@
1
1
  //evals.ts
2
- import { openai } from "@ai-sdk/openai";
3
- import { grade } from "mcp-evals";
2
+ import { openai } from '@ai-sdk/openai';
3
+ import { grade } from 'mcp-evals';
4
4
  const get_cards_by_list_idEval = {
5
5
  name: 'get_cards_by_list_id Tool Evaluation',
6
6
  description: 'Evaluates the get_cards_by_list_id tool functionality',
7
7
  run: async () => {
8
- const result = await grade(openai("gpt-4"), "Can you fetch all cards from the Trello list with ID abc123?");
8
+ const result = await grade(openai('gpt-4'), 'Can you fetch all cards from the Trello list with ID abc123?');
9
9
  return JSON.parse(result);
10
- }
10
+ },
11
11
  };
12
12
  const get_listsEval = {
13
13
  name: 'get_lists Tool Evaluation',
14
14
  description: 'Evaluates the get_lists tool by retrieving all lists from a specified board',
15
15
  run: async () => {
16
- const result = await grade(openai("gpt-4"), "Please retrieve all lists from the board with ID 12345 and provide their names.");
16
+ const result = await grade(openai('gpt-4'), 'Please retrieve all lists from the board with ID 12345 and provide their names.');
17
17
  return JSON.parse(result);
18
- }
18
+ },
19
19
  };
20
20
  const get_recent_activityEvalFunction = {
21
21
  name: 'get_recent_activity Tool Evaluation',
22
22
  description: 'Evaluates the ability to fetch recent activity on the Trello board',
23
23
  run: async () => {
24
- const result = await grade(openai("gpt-4"), "Fetch the recent activity on the Trello board, limit it to 5 items");
24
+ const result = await grade(openai('gpt-4'), 'Fetch the recent activity on the Trello board, limit it to 5 items');
25
25
  return JSON.parse(result);
26
- }
26
+ },
27
27
  };
28
28
  const add_card_to_listEval = {
29
29
  name: 'add_card_to_listEval',
30
30
  description: 'Evaluates the add_card_to_list tool',
31
31
  run: async () => {
32
- const result = await grade(openai("gpt-4"), "Please add a new card named 'Demo Card' to the list with ID 'abc123', with a description of 'This is a test card', due date '2023-12-31T12:00:00Z', and a label 'priority'.");
32
+ const result = await grade(openai('gpt-4'), "Please add a new card named 'Demo Card' to the list with ID 'abc123', with a description of 'This is a test card', due date '2023-12-31T12:00:00Z', start date '2025-08-05', and a label 'priority'.");
33
33
  return JSON.parse(result);
34
- }
34
+ },
35
35
  };
36
36
  const update_card_detailsEval = {
37
37
  name: 'update_card_details Evaluation',
38
38
  description: 'Evaluates the update_card_details tool functionality',
39
39
  run: async () => {
40
- const result = await grade(openai("gpt-4"), "Please update the card with ID 'abc123' to have the name 'Updated Card Name', the description 'New description for the card', a due date of '2024-01-01T10:00:00Z', and labels ['priority','review'].");
40
+ const result = await grade(openai('gpt-4'), "Please update the card with ID 'abc123' to have the name 'Updated Card Name', the description 'New description for the card', a due date of '2024-01-01T10:00:00Z', start date '2025-08-05', and labels ['priority','review'].");
41
41
  return JSON.parse(result);
42
- }
42
+ },
43
+ };
44
+ const mark_card_completeEval = {
45
+ name: 'mark_card_complete Evaluation',
46
+ description: 'Evaluates the ability to mark a card as complete using dueComplete',
47
+ run: async () => {
48
+ const result = await grade(openai('gpt-4'), "Please mark the card with ID 'xyz789' as complete by setting dueComplete to true.");
49
+ return JSON.parse(result);
50
+ },
43
51
  };
44
52
  const config = {
45
- model: openai("gpt-4"),
46
- evals: [get_cards_by_list_idEval, get_listsEval, get_recent_activityEvalFunction, add_card_to_listEval, update_card_detailsEval]
53
+ model: openai('gpt-4'),
54
+ evals: [
55
+ get_cards_by_list_idEval,
56
+ get_listsEval,
57
+ get_recent_activityEvalFunction,
58
+ add_card_to_listEval,
59
+ update_card_detailsEval,
60
+ mark_card_completeEval,
61
+ ],
47
62
  };
48
63
  export default config;
49
- export const evals = [get_cards_by_list_idEval, get_listsEval, get_recent_activityEvalFunction, add_card_to_listEval, update_card_detailsEval];
64
+ export const evals = [
65
+ get_cards_by_list_idEval,
66
+ get_listsEval,
67
+ get_recent_activityEvalFunction,
68
+ add_card_to_listEval,
69
+ update_card_detailsEval,
70
+ mark_card_completeEval,
71
+ ];
50
72
  //# sourceMappingURL=evals.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"evals.js","sourceRoot":"","sources":["../../src/evals/evals.ts"],"names":[],"mappings":"AAAA,UAAU;AAGV,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,KAAK,EAAgB,MAAM,WAAW,CAAC;AAEhD,MAAM,wBAAwB,GAAiB;IAC3C,IAAI,EAAE,sCAAsC;IAC5C,WAAW,EAAE,uDAAuD;IACpE,GAAG,EAAE,KAAK,IAAI,EAAE;QACZ,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,8DAA8D,CAAC,CAAC;QAC5G,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;CACJ,CAAC;AAEF,MAAM,aAAa,GAAiB;IAChC,IAAI,EAAE,2BAA2B;IACjC,WAAW,EAAE,6EAA6E;IAC1F,GAAG,EAAE,KAAK,IAAI,EAAE;QACZ,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,iFAAiF,CAAC,CAAC;QAC/H,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;CACJ,CAAC;AAEF,MAAM,+BAA+B,GAAiB;IAClD,IAAI,EAAE,qCAAqC;IAC3C,WAAW,EAAE,oEAAoE;IACjF,GAAG,EAAE,KAAK,IAAI,EAAE;QACZ,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,oEAAoE,CAAC,CAAC;QAClH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;CACJ,CAAC;AAEF,MAAM,oBAAoB,GAAiB;IACvC,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,qCAAqC;IAClD,GAAG,EAAE,KAAK,IAAI,EAAE;QACZ,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,6KAA6K,CAAC,CAAC;QAC3N,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;CACJ,CAAC;AAEF,MAAM,uBAAuB,GAAiB;IAC1C,IAAI,EAAE,gCAAgC;IACtC,WAAW,EAAE,sDAAsD;IACnE,GAAG,EAAE,KAAK,IAAI,EAAE;QACZ,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,uMAAuM,CAAC,CAAC;QACrP,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;CACJ,CAAC;AAEF,MAAM,MAAM,GAAe;IACvB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;IACtB,KAAK,EAAE,CAAC,wBAAwB,EAAE,aAAa,EAAE,+BAA+B,EAAE,oBAAoB,EAAE,uBAAuB,CAAC;CACnI,CAAC;AAEF,eAAe,MAAM,CAAC;AAEtB,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,wBAAwB,EAAE,aAAa,EAAE,+BAA+B,EAAE,oBAAoB,EAAE,uBAAuB,CAAC,CAAC"}
1
+ {"version":3,"file":"evals.js","sourceRoot":"","sources":["../../src/evals/evals.ts"],"names":[],"mappings":"AAAA,UAAU;AAGV,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,KAAK,EAAgB,MAAM,WAAW,CAAC;AAEhD,MAAM,wBAAwB,GAAiB;IAC7C,IAAI,EAAE,sCAAsC;IAC5C,WAAW,EAAE,uDAAuD;IACpE,GAAG,EAAE,KAAK,IAAI,EAAE;QACd,MAAM,MAAM,GAAG,MAAM,KAAK,CACxB,MAAM,CAAC,OAAO,CAAC,EACf,8DAA8D,CAC/D,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC;AAEF,MAAM,aAAa,GAAiB;IAClC,IAAI,EAAE,2BAA2B;IACjC,WAAW,EAAE,6EAA6E;IAC1F,GAAG,EAAE,KAAK,IAAI,EAAE;QACd,MAAM,MAAM,GAAG,MAAM,KAAK,CACxB,MAAM,CAAC,OAAO,CAAC,EACf,iFAAiF,CAClF,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC;AAEF,MAAM,+BAA+B,GAAiB;IACpD,IAAI,EAAE,qCAAqC;IAC3C,WAAW,EAAE,oEAAoE;IACjF,GAAG,EAAE,KAAK,IAAI,EAAE;QACd,MAAM,MAAM,GAAG,MAAM,KAAK,CACxB,MAAM,CAAC,OAAO,CAAC,EACf,oEAAoE,CACrE,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC;AAEF,MAAM,oBAAoB,GAAiB;IACzC,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,qCAAqC;IAClD,GAAG,EAAE,KAAK,IAAI,EAAE;QACd,MAAM,MAAM,GAAG,MAAM,KAAK,CACxB,MAAM,CAAC,OAAO,CAAC,EACf,sMAAsM,CACvM,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC;AAEF,MAAM,uBAAuB,GAAiB;IAC5C,IAAI,EAAE,gCAAgC;IACtC,WAAW,EAAE,sDAAsD;IACnE,GAAG,EAAE,KAAK,IAAI,EAAE;QACd,MAAM,MAAM,GAAG,MAAM,KAAK,CACxB,MAAM,CAAC,OAAO,CAAC,EACf,gOAAgO,CACjO,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC;AAEF,MAAM,sBAAsB,GAAiB;IAC3C,IAAI,EAAE,+BAA+B;IACrC,WAAW,EAAE,oEAAoE;IACjF,GAAG,EAAE,KAAK,IAAI,EAAE;QACd,MAAM,MAAM,GAAG,MAAM,KAAK,CACxB,MAAM,CAAC,OAAO,CAAC,EACf,mFAAmF,CACpF,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC;AAEF,MAAM,MAAM,GAAe;IACzB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;IACtB,KAAK,EAAE;QACL,wBAAwB;QACxB,aAAa;QACb,+BAA+B;QAC/B,oBAAoB;QACpB,uBAAuB;QACvB,sBAAsB;KACvB;CACF,CAAC;AAEF,eAAe,MAAM,CAAC;AAEtB,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,wBAAwB;IACxB,aAAa;IACb,+BAA+B;IAC/B,oBAAoB;IACpB,uBAAuB;IACvB,sBAAsB;CACvB,CAAC"}
@@ -0,0 +1,122 @@
1
+ export interface TrelloCheckItem {
2
+ id: string;
3
+ name: string;
4
+ state: 'complete' | 'incomplete';
5
+ pos: number;
6
+ due?: string | null;
7
+ dueReminder?: number | null;
8
+ idMember?: string | null;
9
+ }
10
+ export interface TrelloChecklist {
11
+ id: string;
12
+ name: string;
13
+ idCard: string;
14
+ pos: number;
15
+ checkItems: TrelloCheckItem[];
16
+ }
17
+ export interface TrelloLabelDetails {
18
+ id: string;
19
+ idBoard: string;
20
+ name: string;
21
+ color: string;
22
+ }
23
+ export interface TrelloComment {
24
+ id: string;
25
+ date: string;
26
+ data: {
27
+ text: string;
28
+ card?: {
29
+ id: string;
30
+ name: string;
31
+ };
32
+ };
33
+ memberCreator: {
34
+ id: string;
35
+ fullName: string;
36
+ username: string;
37
+ avatarUrl?: string;
38
+ };
39
+ }
40
+ export interface TrelloCustomField {
41
+ id: string;
42
+ name: string;
43
+ type: string;
44
+ value?: any;
45
+ }
46
+ export interface TrelloBadges {
47
+ attachmentsByType?: {
48
+ trello?: {
49
+ board: number;
50
+ card: number;
51
+ };
52
+ };
53
+ location: boolean;
54
+ votes: number;
55
+ viewingMemberVoted: boolean;
56
+ subscribed: boolean;
57
+ fogbugz: string;
58
+ checkItems: number;
59
+ checkItemsChecked: number;
60
+ checkItemsEarliestDue?: string | null;
61
+ comments: number;
62
+ attachments: number;
63
+ description: boolean;
64
+ due?: string | null;
65
+ dueComplete: boolean;
66
+ start?: string | null;
67
+ }
68
+ export interface TrelloCover {
69
+ idAttachment?: string | null;
70
+ color?: string | null;
71
+ idUploadedBackground?: string | null;
72
+ size: 'normal' | 'full';
73
+ brightness: 'light' | 'dark';
74
+ isTemplate: boolean;
75
+ }
76
+ export interface EnhancedTrelloCard {
77
+ id: string;
78
+ name: string;
79
+ desc: string;
80
+ descData?: {
81
+ emoji?: Record<string, any>;
82
+ };
83
+ due: string | null;
84
+ dueComplete: boolean;
85
+ dueReminder: number | null;
86
+ start: string | null;
87
+ idList: string;
88
+ idBoard: string;
89
+ closed: boolean;
90
+ url: string;
91
+ shortUrl: string;
92
+ dateLastActivity: string;
93
+ pos: number;
94
+ labels: TrelloLabelDetails[];
95
+ idLabels: string[];
96
+ attachments: TrelloAttachment[];
97
+ checklists: TrelloChecklist[];
98
+ members: TrelloMember[];
99
+ idMembers: string[];
100
+ comments: TrelloComment[];
101
+ customFieldItems?: TrelloCustomField[];
102
+ badges: TrelloBadges;
103
+ cover: TrelloCover;
104
+ list?: {
105
+ id: string;
106
+ name: string;
107
+ };
108
+ board?: {
109
+ id: string;
110
+ name: string;
111
+ url: string;
112
+ };
113
+ }
114
+ export declare class EnhancedTrelloClient {
115
+ getCard(cardId: string, includeMarkdown?: boolean): Promise<EnhancedTrelloCard | string>;
116
+ private formatCardAsMarkdown;
117
+ private formatFileSize;
118
+ }
119
+ export declare function validateGetCardRequest(args: Record<string, unknown>): {
120
+ cardId: string;
121
+ includeMarkdown?: boolean;
122
+ };